import request from '@/api/request'
import { IWebMenuType } from '#/common'

/**
 * Web菜单管理相关接口
 */

/**
 * 创建Web菜单
 * @param data 菜单数据
 * @returns 创建结果
 */
export const createWebMenu = (data: IWebMenuType) => {
  return request.post('/webmenus', data)
}

/**
 * 分页查询Web菜单列表
 * @param params 查询参数
 * @returns 分页数据
 */
export const getWebMenuList = (params: {
  pageNum?: number
  pageSize?: number
  status?: number
}) => {
  return request.get('/webmenus', { params })
}

/**
 * 获取菜单树形结构
 * @returns Promise
 */
export const getMenuTree = () => {
  return request.get("/webmenus/tree")
};

/**
 * 根据菜单编码获取Web菜单
 * @param code 菜单编码
 * @returns 菜单对象
 */
export const getWebMenuByCode = (code: string) => {
  return request.get(`/webmenus/code/${code}`)
}

/**
 * 根据父菜单编码获取子菜单列表
 * @param parentCode 父菜单编码
 * @returns 子菜单列表
 */
export const getWebMenuByParentCode = (parentCode: string) => {
  return request.get(`/webmenus/parent/${parentCode}`)
}

/**
 * 根据模型类型获取菜单列表
 * @param modelType 模型类型
 * @param params 查询参数
 * @returns 菜单列表
 */
export const getWebMenuByModelType = (modelType: string, params: {
  pageNum?: number
  pageSize?: number
  status?: number
}) => {
  return request.get(`/webmenus/modelType/${modelType}`, { params })
}

/**
 * 根据模型类型获取所有菜单列表（不分页）
 * @param modelType 模型类型
 * @param status 菜单状态筛选
 * @returns 菜单列表
 */
export const getAllWebMenuByModelType = (modelType: string, status?: number) => {
  const params = status !== undefined ? { status } : {}
  return request.get(`/webmenus/modelType/${modelType}/all`, { params })
}

/**
 * 根据ID获取单个Web菜单
 * @param id 菜单ID
 * @returns 菜单对象
 */
export const getWebMenuById = (id: string) => {
  return request.get(`/webmenus/${id}`)
}

/**
 * 更新Web菜单
 * @param id 菜单ID
 * @param data 更新数据
 * @returns 更新结果
 */
export const updateWebMenu = (id: string, data: Partial<IWebMenuType>) => {
  return request.patch(`/webmenus/${id}`, data)
}

/**
 * 更新菜单状态
 * @param id 菜单ID
 * @param status 新状态
 * @returns 更新结果
 */
export const updateWebMenuStatus = (id: string, status: number) => {
  return request.patch(`/webmenus/${id}/status`, { status })
}

/**
 * 删除Web菜单
 * @param id 菜单ID
 * @returns 删除结果
 */
export const deleteWebMenu = (id: string) => {
  return request.delete(`/webmenus/${id}`)
}

/**
 * 批量删除Web菜单
 * @param ids 菜单ID数组
 * @returns 删除结果
 */
export const batchDeleteWebMenus = (ids: string[]) => {
  return request.delete('/webmenus/batch/remove', { data: { ids } })
}

export const getMenusByModelId = (modelId: string) => {
  return request.get(`/webmenus/modelId/${modelId}`)
}